package com.eatrip.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;

import com.eatrip.bean.DatiLocale;
import com.eatrip.bean.DettagliLocale;
import com.eatrip.bean.FasciaPrezzo;
import com.eatrip.bean.Giorni;
import com.eatrip.bean.ProdottoTipico;
import com.eatrip.bean.Ricetta;
import com.eatrip.bean.TipoLocale;
import com.eatrip.bean.User;
import com.eatrip.service.DatiLocaleService;
import com.eatrip.service.ProdottiTipiciService;
import com.eatrip.service.RicetteService;
import com.eatrip.service.UserService;
import com.eatrip.validation.FormRegistraLocale;



@Controller
public class FrontController {
	
	@Autowired
	private UserService userService;
	
	@Autowired
	private ProdottiTipiciService prodottiTipiciService;
	
	@Autowired
	private RicetteService ricetteService;
	
	@Autowired
	private DatiLocaleService datiLocaleService;
	
		
	@RequestMapping(value="/home", method = RequestMethod.GET)
	public String homepage(Model model,SessionStatus sessionStatus){
		sessionStatus.setComplete();
		
		ProdottoTipico prodottoTipico = new ProdottoTipico();
		Ricetta ricetta = new Ricetta();
		prodottoTipico = prodottiTipiciService.getRandProdottoTipico();
		ricetta = ricetteService.getRandRicetta();
		
		List<DatiLocale> list = datiLocaleService.getDatiLocaleBestValutazione(3);
		
		model.addAttribute("datiLocali", list);
		model.addAttribute("prodottoTipico", prodottoTipico);
		model.addAttribute("ricetta", ricetta);
		return "homepage";
	}
	
	@RequestMapping(value="/index.html")
	public String homepage2(Model model,SessionStatus sessionStatus){
		
			return "redirect:/home";
	}
		
	@RequestMapping(value="/homepage.html")
	public String homepage3(Model model,SessionStatus sessionStatus){
			return "redirect:/home";
	}
	
	@RequestMapping(value="/homepage.html" , method = RequestMethod.POST)
	public String login( @RequestParam(value="username") String username,
						 @RequestParam(value="password") String password,
						 SessionStatus sessionStatus,
						 Model model){
		
		User user = new User();
		user = userService.getUser(username, password);
		if (user == null)
			return "error";
		else{
			DatiLocale datiLocale = new DatiLocale();
			datiLocale = datiLocaleService.getDatiEDettagliLocaleByEmail(username);
			if (datiLocale != null){
				return "redirect:locale/idLocale/"+datiLocale.getIdLocale()+"";
			}
		}
		
		return "homepage";
	}
	
	@RequestMapping(value="/registrazione.html")
	public String registrazione(){
		return "registrazione";
	}
	
	
	@RequestMapping(value="/registrazione.html" , method = RequestMethod.POST)
	public String effettuaRegistrazione( @ModelAttribute User user , BindingResult rs){
		if (rs.hasErrors()){
			return "error";
		}
		userService.insertUser(user);
		return "registrazione";
	}
	
	@RequestMapping(value="/registra-locale", method = RequestMethod.GET)
	public String registraLocaleGET(Model model,
									DatiLocale datiLocale,
									DettagliLocale dettagliLocale,
									FasciaPrezzo fasciaPrezzo,
									TipoLocale tipoLocale,
									Giorni giorni){
		
		model.addAttribute("datiLocale", datiLocale);
		model.addAttribute("dettagliLocale", dettagliLocale);
		model.addAttribute("fasciaPrezzo", fasciaPrezzo);
		model.addAttribute("tipoLocale", tipoLocale);
		model.addAttribute("giorni", giorni);
		
		return "registra-locale";
	}
	
	@RequestMapping(value="/registra-locale", method = RequestMethod.POST)
	public String registraLocalePOST(@ModelAttribute("datiLocale") DatiLocale datiLocale,
									 @ModelAttribute("dettagliLocale") DettagliLocale dettagliLocale,
									 @ModelAttribute("fasciaPrezzo") FasciaPrezzo fasciaPrezzo,
									 @ModelAttribute("tipoLocale") TipoLocale tipoLocale,
									 @ModelAttribute("giorni") Giorni giorni,
									 @RequestParam(value = "nomeLocale") String nome,
									 Model model){
		
		
		if (datiLocale != null){
			System.out.println(datiLocale);
			
		}
		
		
		if (dettagliLocale != null)
			System.out.println(dettagliLocale.getRicevimenti());
		
		
		return "registra-locale";
	}
		
}
